// process.stdin.on('data', function (chunk) {
//     process.stdout.write(chunk.toString().toUpperCase())
// });
// import { Transform } from 'stream'
// class MyTransform extends Transform {
//     _transform(chunk, encoding, callback) {
//         chunk = chunk.toString().toUpperCase();
//         this.push(chunk)
//         callback()
//     }
// }
// pipe
// process.stdin.pipe(new MyTransform).pipe(process.stdout)
// 可读流     可写流


// console.log() 可写流： 为了给命令行写入内容的
// process.stdout.write('abc')
// process.stderr.write('abc')
// cli -> 交互 


// 压缩 , 加密的
import zlib from 'zlib'; // 做压缩处理
import crypto from 'crypto'; // 做加密处理的
import fs from 'fs'
import path from 'path'

// const gzip = zlib.createGzip(); // 转化流 

// fs.createReadStream(path.resolve(import.meta.dirname, 'a'))
//     .pipe(gzip)
//     .pipe(fs.createWriteStream(path.resolve(import.meta.dirname, 'a.gz')))


// md5 摘要算法，  根据内容生成摘要，不能反解
// 1.不能根据摘要后的结果反推原始内容
// 2.相同的内容，摘要结果相同
// 3.如果内容有一点变化，出来的结果会差别很大 雪崩效应
// 4.最终摘要的结果长度是一致

// 加盐算法 （有秘钥的md5）  hmac(sha1  sha256  盐值)   
// const r = crypto.createHash('md5').update('abc1').digest('base64')
const md5Stream = crypto.createHash('md5', {})

fs.createReadStream(path.resolve(import.meta.dirname, 'a'))
    .pipe(md5Stream)
    .pipe(process.stdout)

// kAFQmDzST7DWlj99KOF/cg==
// I3NM1SrUpPuHfYoeJuXfXw==


// 压缩缺点？重复性高内容适合采用gzip, 视频音频不能用 gzip压缩 （本质替换）



// 大纲：目录

